#include <interface.h>
#include <unistd.h>
#include <signal.h>
#include <sys/param.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void init_daemon(void)
{

    int pid;
    int i;
    if(pid=fork())
        exit(0);        //是父进程，结束父进程
    else if(pid< 0)
        exit(1);        //fork失败，退出
						//是第一子进程，后台继续执行
    setsid();           //第一子进程成为新的会话组长和进程组长
    //并与控制终端分离
    if(pid=fork())
	{
		FILE *fp;
		int cha;
		if((fp = fopen("/test.txt","w")) >=0)
		{
            fclose(fp);
		}
		exit(0); 
	}//是第一子进程，结束第一子进程
    else if(pid< 0)
        exit(1);        //fork失败，退出

    //是第二子进程，继续
    //第二子进程不再是会话组长
    for(i=0;i< NOFILE;++i)  //关闭打开的文件描述符
        close(i);
    chdir("/tmp");      //改变工作目录到/tmp
    umask(0);           //重设文件创建掩模
    return;

}

int  conver(char *str,int nub)
{
	int i,j=0;
	int arr[nub];
	int sum=0;
	
	for(i=0;i<nub;i++)
	{
		if( (str[i]>'9') || (str[i] < '0'))
			continue;
		arr[j++]=str[i]-'0';
		
	}
	for(i=0;i<j;i++)
	{
		sum+=arr[i];
		if(j>i+1)
			sum*=10;
	}
	return sum;
}

int main()
{
	FILE *fd;
	char str[20]={0};
	int  pid[5]={0};
	int i=0;
	unsigned int adc_val;
	init_daemon();
	sleep(5);
	fd=fopen("/test.txt","a+");
	while(1)
	{
		memset(str,0,sizeof(str));
		fgets(str,15,fd);
		if(feof(fd))
				break;
		pid[i++]=conver(str,strlen(str));
	}
	while(1)
	{
		adc_val=get_adc();
		if(adc_val <50)
		{
			kill(pid[0],SIGSTOP);
			set_buzzer(0);
			for(i=0;i<3;i++)
			{			
				set_buzzer(SOL);	
				sleep(1);
			}	
			set_buzzer(0);
			kill(pid[0],SIGCONT);
			sleep(30);
		}
	}
}
